gl renderer: Don't pass MVP to shaders
authorTimm Bäder <mail@baedert.org>
Sun, 19 Nov 2017 13:39:56 +0000 (14:39 +0100)
committerTimm Bäder <mail@baedert.org>
Thu, 21 Dec 2017 18:12:30 +0000 (19:12 +0100)
We already pass both modelview and projection matrix individually.

gsk/gskglrenderer.c
gsk/meson.build
gsk/resources/glsl/blend.vs.glsl
gsk/resources/glsl/blit.vs.glsl
gsk/resources/glsl/color.vs.glsl [deleted file]
gsk/resources/glsl/color_matrix.vs.glsl [deleted file]
gsk/resources/glsl/gl3_common.fs.glsl
gsk/resources/glsl/gl3_common.vs.glsl
gsk/resources/glsl/linear_gradient.fs.glsl

index 665c48eee44fa3043990e2e9e16d72aed2de31d4..f11a5d38c95a633e3d6f6b04558c5bc0a58814ae 100644 (file)
@@ -66,7 +66,6 @@ gsk_gl_renderer_setup_render_mode (GskGLRenderer *self);
 typedef struct {
   int id;
   /* Common locations (gl_common)*/
-  int mvp_location;
   int source_location;
   int mask_location;
   int uv_location;
@@ -128,7 +127,6 @@ typedef struct {
 
   graphene_size_t size;
 
-  graphene_matrix_t mvp;
   graphene_matrix_t projection;
   graphene_matrix_t modelview;
 
@@ -179,7 +177,6 @@ destroy_render_item (RenderItem *item)
 
 
 enum {
-  MVP,
   SOURCE,
   MASK,
   ALPHA,
@@ -331,8 +328,6 @@ init_common_locations (GskGLRenderer    *self,
     gsk_shader_builder_get_uniform_location (builder, prog->id, self->uniforms[SOURCE]);
   prog->mask_location =
     gsk_shader_builder_get_uniform_location (builder, prog->id, self->uniforms[MASK]);
-  prog->mvp_location =
-    gsk_shader_builder_get_uniform_location (builder, prog->id, self->uniforms[MVP]);
   prog->alpha_location =
     gsk_shader_builder_get_uniform_location (builder, prog->id, self->uniforms[ALPHA]);
   prog->blendMode_location =
@@ -368,7 +363,6 @@ gsk_gl_renderer_create_programs (GskGLRenderer  *self,
 
   gsk_shader_builder_set_resource_base_path (builder, "/org/gtk/libgsk/glsl");
 
-  self->uniforms[MVP] = gsk_shader_builder_add_uniform (builder, "uMVP");
   self->uniforms[SOURCE] = gsk_shader_builder_add_uniform (builder, "uSource");
   self->uniforms[MASK] = gsk_shader_builder_add_uniform (builder, "uMask");
   self->uniforms[ALPHA] = gsk_shader_builder_add_uniform (builder, "uAlpha");
@@ -440,7 +434,7 @@ gsk_gl_renderer_create_programs (GskGLRenderer  *self,
   init_common_locations (self, builder, &self->blit_program);
 
   self->color_program.id =
-    gsk_shader_builder_create_program (builder, "color.vs.glsl", "color.fs.glsl", &shader_error);
+    gsk_shader_builder_create_program (builder, "blit.vs.glsl", "color.fs.glsl", &shader_error);
   if (shader_error != NULL)
     {
       g_propagate_prefixed_error (error,
@@ -466,7 +460,7 @@ gsk_gl_renderer_create_programs (GskGLRenderer  *self,
   INIT_PROGRAM_UNIFORM_LOCATION (coloring_program, color_location, "uColor");
 
   self->color_matrix_program.id = gsk_shader_builder_create_program (builder,
-                                                                     "color_matrix.vs.glsl",
+                                                                     "blit.vs.glsl",
                                                                      "color_matrix.fs.glsl",
                                                                      &shader_error);
   if (shader_error != NULL)
@@ -779,14 +773,12 @@ render_item (GskGLRenderer    *self,
     }
 
   /* Common uniforms */
-  graphene_matrix_to_float (&item->mvp, mat);
-  glUniformMatrix4fv (item->program->mvp_location, 1, GL_FALSE, mat);
-
   graphene_matrix_to_float (&item->projection, mat);
-  glUniformMatrix4fv (item->program->projection_location, 1, GL_TRUE, mat);
+  glUniformMatrix4fv (item->program->projection_location, 1, GL_FALSE, mat);
 
   graphene_matrix_to_float (&item->modelview, mat);
-  glUniformMatrix4fv (item->program->modelview_location, 1, GL_TRUE, mat);
+  glUniformMatrix4fv (item->program->modelview_location, 1, GL_FALSE, mat);
+
   glUniform1f (item->program->alpha_location, item->opacity);
   glUniform4f (item->program->viewport_location,
                self->viewport.origin.x, self->viewport.origin.y,
@@ -899,8 +891,6 @@ gsk_gl_renderer_add_render_item (GskGLRenderer           *self,
   item.max.x = item.min.x + node->bounds.size.width;
   item.max.y = item.min.y + node->bounds.size.height;
 
-  /* The location of the item, in normalized world coordinates */
-  graphene_matrix_multiply (modelview, projection, &item.mvp);
   item.z = project_item (projection, modelview);
 
   item.opacity = 1.0;
index 894c314a118352260b3a5978037a586dfe607013..7f2ebcce705343f65b20da54df922d01abc643a2 100644 (file)
@@ -4,10 +4,8 @@ gsk_private_source_shaders = [
   'resources/glsl/blit.fs.glsl',
   'resources/glsl/blit.vs.glsl',
   'resources/glsl/color.fs.glsl',
-  'resources/glsl/color.vs.glsl',
   'resources/glsl/coloring.fs.glsl',
   'resources/glsl/color_matrix.fs.glsl',
-  'resources/glsl/color_matrix.vs.glsl',
   'resources/glsl/linear_gradient.fs.glsl',
   'resources/glsl/es2_common.fs.glsl',
   'resources/glsl/es2_common.vs.glsl',
index a453e32c9a282896a4590b7574ae7619d079573d..da1d541bd5394cddf4a7b5fd13dad9bd013c5238 100644 (file)
@@ -1,5 +1,5 @@
 void main() {
-  gl_Position = uMVP * vec4(aPosition, 0.0, 1.0);
+  gl_Position = uModelview * uProjection * vec4(aPosition, 0.0, 1.0);
 
   vUv = vec2(aUv.x, aUv.y);
 }
index 1208513f33250c920bc6543d56f4fabc74c1cb5f..68a406dd03ea13714f1df487530bca16e5d5b512 100644 (file)
@@ -1,6 +1,5 @@
 void main() {
-  gl_Position = uMVP * vec4(aPosition, 0.0, 1.0);
+  gl_Position = uProjection * uModelview * vec4(aPosition, 0.0, 1.0);
 
-  // Flip the sampling
   vUv = vec2(aUv.x, aUv.y);
 }
diff --git a/gsk/resources/glsl/color.vs.glsl b/gsk/resources/glsl/color.vs.glsl
deleted file mode 100644 (file)
index 1208513..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-void main() {
-  gl_Position = uMVP * vec4(aPosition, 0.0, 1.0);
-
-  // Flip the sampling
-  vUv = vec2(aUv.x, aUv.y);
-}
diff --git a/gsk/resources/glsl/color_matrix.vs.glsl b/gsk/resources/glsl/color_matrix.vs.glsl
deleted file mode 100644 (file)
index 1208513..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-void main() {
-  gl_Position = uMVP * vec4(aPosition, 0.0, 1.0);
-
-  // Flip the sampling
-  vUv = vec2(aUv.x, aUv.y);
-}
index ad465bc8f7cf80804c3d5480f3c4d58d4fdaec44..4e516d20db2bd67e8a1eca9d0b2b81714fb2c50d 100644 (file)
@@ -2,7 +2,6 @@ precision highp float;
 
 uniform sampler2D uSource;
 uniform sampler2D uMask;
-uniform mat4 uMVP;
 uniform mat4 uProjection = mat4(1.0);
 uniform mat4 uModelview = mat4(1.0);
 uniform float uAlpha = 1.0;
index 9794cf0bce3155c4efeb9ec2bd210d3403f0af35..2fb825f02f2a8fcd849ecfb31553bb8986b2fc5f 100644 (file)
@@ -1,6 +1,5 @@
-uniform mat4 uMVP;
 uniform mat4 uProjection;
-//uniform mat4 uModelview;
+uniform mat4 uModelview;
 
 in vec2 aPosition;
 in vec2 aUv;
index d107e8a1efda6d649434c7f55a9a4c6ca4c8d3cc..f14b3ebd9fcc66bb752eead7c135955da15e1659 100644 (file)
@@ -12,8 +12,8 @@ vec4 fragCoord() {
 }
 
 void main() {
-  vec2 startPoint = (vec4(uStartPoint, 0, 1) * uModelview).xy;
-  vec2 endPoint   = (vec4(uEndPoint,   0, 1) * uModelview).xy;
+  vec2 startPoint = (uModelview * vec4(uStartPoint, 0, 1)).xy;
+  vec2 endPoint   = (uModelview * vec4(uEndPoint,   0, 1)).xy;
   float maxDist   = length(endPoint - startPoint);
 
   // Position relative to startPoint